package com.richpay.basejava.base10;

/**
 * 自定义类如果没有显示指定继承了那个类，则默认情况下继承了Object类，
 * 因此当前类Person继承了Object。
 * <p>
 * 所以p1.equals(p2)其实调用了Object类中的equals()方法，而这个方法用来比较对象的引用地址是否相同，和==的功能一样.
 * 因此返回 false。
 * <p>
 * 如果要求是名字相同，年龄相同则是同一个人，需要重写 equals()方法。
 */
public class Person {
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }

    public void display() {
        System.out.println("name=" + name + ",age=" + age);
    }

    /**
     * 重写了Object类中的equals(Object obj)方法，使其具有比较对象内容是否相同的功能。
     * <p>
     * 当前对象是this，与之比较的对象是obj
     *
     * @param obj
     * @return true:表示相等，false：表示不等。
     */
    @Override
    public boolean equals(Object obj) {
        //情况一:自己和自己比，肯定相等，不用比了。
        if (this == obj) {
            return true;
        }
        // 对象 instanceof 类:判断对象是不是由这个类实例化的，不同类型的对象肯定不相等。
        if (!(obj instanceof Person)) {
            return false;
        }

        //能走到这里则是Person类的对象进行比较了，就是人和人进行比较了。
        Person p = (Person) obj;//向下转型
        //判断姓名和年龄都相等，是返回true，否则返回false
        return this.name.equals(p.name) && this.age == p.age;
    }
}
